#include "log.h"
#include <stdlib.h>
#include <errno.h>
#include "Sesion.h"
#include "mensajes/Mensaje.h"

#define EXIT_ERROR_PARAMETROS 1

int main(int argc, char *argv[]){

    if(argc < 3) {
	log(stdout, "%s <numero usuario> <id conversacion>", argv[0]);
	exit(EXIT_ERROR_PARAMETROS);
    }

    int numeroUsuario = atoi(argv[1]);
    int idConversacion = atoi(argv[2]);

    Sesion sesion;
    sesion.recuperar(numeroUsuario);
    Conversacion conversacion = sesion.getConversacion(idConversacion);

    char mensaje[100];
    mensaje[0] = 0;
    
    bool salir = false;
    while(!salir){
	if(!fgets(mensaje, 100, stdin)){
	    perror("Error la leer");
	    break;
	}

	if(mensaje[0]==':'){
	    mensaje[strlen(mensaje)-1] = 0;
	    char buffer[500];
	    FILE* archivo = fopen(mensaje+1, "r");
	    if(!archivo){
		if(strlen(mensaje) > 1 && mensaje[1] == 'q'){
		    log("Salgo del editor.");
		    salir = true;
		    continue;
		}
		else{
		    log(stdout, "Error al abrir el archivo %s.\n", mensaje+1);
		    continue;
		}
	    }

	    while(!salir && !feof(archivo)){
		unsigned leido = fread(buffer, 1, 500, archivo);
		std::vector<MensajeTXT> mensajes = MensajeTXT::generar(numeroUsuario, idConversacion, buffer, leido);
		for(unsigned i=0;i < mensajes.size(); i++){
		    conversacion.enviarMensaje((char*)(&mensajes[i]), sizeof(MensajeTXT));
		}
	    }
	    fclose(archivo);
	    continue;
	}

	MensajeTXT texto;
	texto.idUsuario = numeroUsuario;
	texto.idConversacion = idConversacion;
	texto.longitud = strlen(mensaje);
	strcpy(texto.texto, mensaje);
	log(stdout, "%d: pongo mensaje en la outbox\n",texto.texto);
     	conversacion.enviarMensaje((char*)&texto, sizeof(MensajeTXT));
    }

    log(stdout, "%d: Proceso editor sale.\n",getpid());

    return 0;
}
